import CryptoJS from 'crypto-js';
import { log } from './logger.js';

// 加密密钥（从环境变量获取）
const ENCRYPTION_KEY = process.env.ENCRYPTION_KEY || 'default-key-please-change-in-production';

/**
 * 加密敏感数据（如SSH密码）
 * @param {string} text 要加密的文本
 * @returns {string} 加密后的文本
 */
export function encrypt(text) {
  try {
    const encrypted = CryptoJS.AES.encrypt(text, ENCRYPTION_KEY).toString();
    log.debug('数据加密成功');
    return encrypted;
  } catch (error) {
    log.error('数据加密失败', { error: error.message });
    throw new Error('加密失败');
  }
}

/**
 * 解密敏感数据
 * @param {string} encryptedText 加密的文本
 * @returns {string} 解密后的文本
 */
export function decrypt(encryptedText) {
  try {
    const decrypted = CryptoJS.AES.decrypt(encryptedText, ENCRYPTION_KEY);
    const text = decrypted.toString(CryptoJS.enc.Utf8);
    
    if (!text) {
      throw new Error('解密结果为空');
    }
    
    log.debug('数据解密成功');
    return text;
  } catch (error) {
    log.error('数据解密失败', { error: error.message });
    throw new Error('解密失败');
  }
}

/**
 * 生成随机密钥
 * @param {number} length 密钥长度
 * @returns {string} 随机密钥
 */
export function generateRandomKey(length = 32) {
  return CryptoJS.lib.WordArray.random(length).toString();
}

